#ifndef LOGGER_H
#define LOGGER_H

/* 日志级别 */
typedef enum
{
	LOG_DEBUG,	/* 调试级别,用于输出详细的调试信息 */
	LOG_INFO,	/* 信息级别,用于输出一般的程序执行信息 */
	LOG_WARN,	/* 警告级别,用于输出可能的问题或者不期望的事件 */
	LOG_ERROR,	/* 错误级别,用于输出错误信息,影响程序正常执行 */
	LOG_FILE	/* 文件级别,用于输出日志信息到文件中 */
} LogLevel;

/* 日志配置 */
typedef struct
{
	LogLevel level;		/* 日志记录级别,可选值: LOG_DEBUG,LOG_INFO,LOG_WARN,LOG_ERROR,LOG_FILE */
	char filename[256];	/* 日志文件名称,最大支持 256 个字符 */
	int max_size;		/* 单个日志文件的最大大小限制(单位:MB) */
	int isprint;		/* 终端日志输出开关,0-表示不输出日志到终端,1-表示输出 */
} LoggerConfig;

/* 初始化日志记录器 */
int log_init(const LoggerConfig *config);

/* 写入日志 */
int log_write(LogLevel level, const char *file, int line, const char *format, ...);

/* 关闭日志记录器 */
int log_close();

int mkdir_p(const char *path);

/* 日志系统宏,方便日志写入 */
#define LOG_DEBUG(fmt, ...) log_write(LOG_DEBUG, __FILE__, __LINE__, fmt, ##__VA_ARGS__)	/* 调试日志(输出到终端和日志文件) */
#define LOG_INFO(fmt, ...)  log_write(LOG_INFO,  __FILE__, __LINE__, fmt, ##__VA_ARGS__)	/* 普通日志(输出到终端和日志文件) */
#define LOG_WARN(fmt, ...)  log_write(LOG_WARN,  __FILE__, __LINE__, fmt, ##__VA_ARGS__)	/* 警告日志(输出到终端和日志文件) */
#define LOG_ERROR(fmt, ...) log_write(LOG_ERROR, __FILE__, __LINE__, fmt,## __VA_ARGS__)	/* 错误日志(输出到终端和日志文件) */
#define LOG_FILE(fmt, ...)  log_write(LOG_FILE,  __FILE__, __LINE__, fmt, ##__VA_ARGS__)	/* 文件日志(仅输出到日志文件) */

#endif /* LOGGER_H */
